﻿using System;
using System.Text;
using System.Data;
using System.Collections;
using System.Globalization;
using System.ComponentModel;
using System.Collections.Generic;
using Sinacor.Infra.UI.Common;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.UI.Bovespa.Ordens.Communication;
using Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.ResumoFinanceiro.ResumoFinanceiro;
using Sinacor.UI.Bovespa.Ordens.Communication.Bovespa.Calendario.Calendario;
using Sinacor.UI.Bovespa.Ordens.Model;
 //aLTERADO
//TODO: 0000869 - ARQVPC - Mover tradução de contrato para model para camada de Comunicação
namespace Sinacor.UI.Bovespa.Ordens.Presenter
{
    public class ResumoFinanceiroPresenter : BasePresenter<IResumoFinanceiro>
    {
        #region Variaveis de classe

        private IResumoFinanceiro _view;
        private Communication.ResumoFinanceiro _comunicacao;
        private Sinacor.UI.Bovespa.Ordens.Communication.Calendario _comunicationCalendario;
        private int _registroAtual = 0;

        private List<ResumoFinanceiroResponse> _registrosResumo;
        private string _moduleID;
        #endregion

        #region Propriedades
        public Communication.Calendario ComunicationCalendario
        {
            get { return _comunicationCalendario; }
            set { _comunicationCalendario = value; }
        }
        public string ModuleID
        {
            get { return _moduleID; }
            set { _moduleID = value; }
        }

        public int RegistroAtual
        {
            get { return _registroAtual; }
            set { _registroAtual = value; }
        }
        #endregion

        /// <summary>
        /// Construtor da classe ResumoFinanceiroPresenter.
        /// </summary>
        /// <param name="view"></param>
        /// <user>asoares</user>
        public ResumoFinanceiroPresenter(IResumoFinanceiro view)
            : base(view)
        {
            this._view = view;
        }

        /// Data:18/03/2008 16:23
        /// Autor:DMilanez.7Comm
        /// Obs: Adição de Construtor padrão privado de forma a impedir a criacao do objeto sem informar
        /// os parametros obrigatórios
        private ResumoFinanceiroPresenter()
            : base(null)
        {
        }

        #region Carregar Valores Iniciais

        /// <summary>
        /// Carrega os valores que devem estar presentes na exibição inicial da view.
        /// </summary>
        /// <user>asoares</user>
        public void CarregarValoresIniciais()
        {
            this.CarregarDatas();
            this.ModuleID = "ORD";
        }

        #endregion

        #region Carregar Datas

        /// <summary>
        /// Carregar as datas.
        /// </summary>
        /// <user>asoares</user>
        public void CarregarDatas()
        {
            ModelCollection<Model.Calendario> retorno = null;

            try
            {
                ComunicationCalendario = new Sinacor.UI.Bovespa.Ordens.Communication.Calendario(this.Session);
                  this._comunicacao = new Communication.ResumoFinanceiro(this.Session);
                retorno = ComunicationCalendario.ConsultarCalendario();

            }
            catch (Exception ex)
            {
                HandleException(ex);
            }

            if (retorno != null)
            {
                List<String> datas = new List<String>();
                for (int x = 0; x < retorno.Count; x++)
                    datas.Add(retorno[x].DataPregao.ToString(CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern));

                this._view.ExibirDatas(datas);
            }
        }

        #endregion

        #region Converter Tipo Cliente
        /// Data:01/02/2008 13:51
        /// Autor:Dmilanez.7comm
        /// Obs:
        /// Metodo responsavel por converter um Enum TipoCliente (UI) para TipoCliente (Servico)
        private Communication.Bovespa.ResumoFinanceiro.ResumoFinanceiro.TipoCliente
            ConverterTipoCliente(Model.Enum.TipoCliente ? parm)
        {
            switch (parm)
            {
                case Model.Enum.TipoCliente.Broker:
                    return Communication.Bovespa.ResumoFinanceiro.ResumoFinanceiro.TipoCliente.Broker;
                case Model.Enum.TipoCliente.Cliente:
                    return Communication.Bovespa.ResumoFinanceiro.ResumoFinanceiro.TipoCliente.Cliente;
                case Model.Enum.TipoCliente.Financeiro:
                    return Communication.Bovespa.ResumoFinanceiro.ResumoFinanceiro.TipoCliente.Financeiro;
                default:
                    return Communication.Bovespa.ResumoFinanceiro.ResumoFinanceiro.TipoCliente.Cliente;
            }

        }

        /// Data:01/02/2008 13:51
        /// Autor:Dmilanez.7comm
        /// Obs:
        /// Metodo responsavel por converter um Enum TipoCliente (UI) para TipoCliente (Servico)
        private Model.Enum.TipoCliente
            ConverterTipoCliente(Communication.Bovespa.ResumoFinanceiro.ResumoFinanceiro.TipoCliente parm)
        {
            switch (parm)
            {
                case Communication.Bovespa.ResumoFinanceiro.ResumoFinanceiro.TipoCliente.Broker:
                    return Model.Enum.TipoCliente.Broker;
                case Communication.Bovespa.ResumoFinanceiro.ResumoFinanceiro.TipoCliente.Cliente:
                    return Model.Enum.TipoCliente.Cliente;
                case Communication.Bovespa.ResumoFinanceiro.ResumoFinanceiro.TipoCliente.Financeiro:
                    return Model.Enum.TipoCliente.Financeiro;
                default:
                    return Model.Enum.TipoCliente.Cliente;
            }
        }


        #endregion

        #region Pesquisar Resumo Financeiro

        private bool ValidarFiltroPesquisa(ModelFiltroResumoFinanceiro request)
        {
            bool apelidoValido = true;
            bool dataValida = true;
            bool tipoClienteValido = true;

            if (String.IsNullOrEmpty(request.ApelidoCliente))
                apelidoValido = false;

            if (!request.DataPregao.HasValue)
                dataValida = false;

            if (!request.TipoCliente.HasValue)
                tipoClienteValido = false;

            if (!(apelidoValido && dataValida && tipoClienteValido))
                this._view.InformarFiltroInvalido(apelidoValido, dataValida, tipoClienteValido);

            return (apelidoValido && dataValida && tipoClienteValido);
        }

        private bool ValidarFiltroPesquisaComitente(ModelFiltroResumoFinanceiro filtro)
        {
            if (String.IsNullOrEmpty(filtro.ApelidoCliente))
                return false;

            if (!filtro.DataPregao.HasValue)
                return false;

            if (!filtro.TipoCliente.HasValue)
                return false;

            if (!filtro.CodigoCliente.HasValue)
                return false;

            if (String.IsNullOrEmpty(filtro.TipoNegocio))
                return false;

            if (String.IsNullOrEmpty(filtro.CodigoBolsaFaturamento))
                return false;

            if (!filtro.DataMovimento.HasValue)
                return false;

            return true;
        }

        /// <summary>
        /// Realiza a pesquisa de um Resumo Financeiro.
        /// 
        /// Data:19/03/2008 10:40
        /// Autor:DMilanez.7Comm
        /// Obs:
        /// 
        /// Alterado de forma a receber como parametro o indicador de consulta analitica
        /// </summary>
        /// <param name="objResumoFinanceiro">Filtros definidos pelo usuário.</param>
        /// <user>asoares</user>
        public void Pesquisar(ModelFiltroResumoFinanceiro filtro, bool isAnalitico)
        {
            ConsultarResumoFinanceiroRequest requestResumo;
            
            //IEnumerable comitentes = null;
            //bool ocultarColunas = false;

            try
            {
                if (!ValidarFiltroPesquisa(filtro))
                {
                    return;
                }

                requestResumo = new ConsultarResumoFinanceiroRequest();
               

                requestResumo.ApelidoCliente = filtro.ApelidoCliente;
                requestResumo.DataPregao = filtro.DataPregao.Value;
                requestResumo.TipoCliente = ConverterTipoCliente(filtro.TipoCliente.Value);
                requestResumo.IsSomenteContaSelecionada = filtro.IsSomenteContaSelecionada;

                //20080318 - dmilanez - alterado de forma a verificar o parametro de entrada que indica o modulo que executou a tela
                //if (objResumoFinanceiro.Chamada == Sistema.ControleOrdens)
                if (this.ModuleID == "ORD")
                {
                    this._registrosResumo = _comunicacao.ConsultarResumoFinanceiroControleOrdens(requestResumo);

                    if (this._registrosResumo.Count == 0)
                    {
                        //this._view.ExibirMensagem(Mensagem.SemRetorno);
                        this._view.ConfigurarNovaPesquisa(false);
                        this._view.AvisarPesquisaSemRetorno();
                        return;
                    }


                }
                //20080318 - dmilanez - alterado de forma a verificar o parametro de entrada que indica o modulo que executou a tela
                //else if (objResumoFinanceiro.Chamada == Sistema.FaturamentoBolsas)
                else if (this.ModuleID == "BOL")
                {
                    this._registrosResumo = _comunicacao.ConsultarResumoFinanceiroFaturamentoBolsas(requestResumo);

                    if (this._registrosResumo.Count == 0)
                    {
                        //this._view.ExibirMensagem(Mensagem.SemRetorno);
                        this._view.ConfigurarNovaPesquisa(false);
                        this._view.AvisarPesquisaSemRetorno();
                        return;
                    }

                    //requestComitente.CodigoCliente = _registrosResumo[_registroAtual].CodigoCliente;
                    //requestComitente.DataMovimento = _registrosResumo[_registroAtual].DataMovimento.Value;
                    //requestComitente.CodigoBolsaFaturamento = _registrosResumo[_registroAtual].CodigoBolsaFaturamento;
                    //requestComitente.TipoNegocio = _registrosResumo[_registroAtual].TipoNegocio;
                    //requestComitente.DataPregao = _registrosResumo[_registroAtual].DataPregao;
                    //requestComitente.TipoCliente = _registrosResumo[_registroAtual].TipoCliente;

                    ///// Data:19/03/2008 17:16
                    ///// Autor:DMilanez.7Comm
                    ///// Obs: Alterado
                    ////if (objResumoFinanceiro.IsAnalitico)
                    //if (isAnalitico)
                    //{
                    //    comitentes = _comunicacao.ConsultarComitenteAnaliticoFaturamentoBolsas(requestComitente);
                    //    ocultarColunas = false;
                    //}
                    //else
                    //{
                    //    comitentes = _comunicacao.ConsultarComitenteFaturamentoBolsas(requestComitente);
                    //    ocultarColunas = true;
                    //}
                }
                else
                {
                    //20080319 - dmilanez - se for chamado por algum outro módulo, não executar ação alguma
                    return;
                }
                this._view.View_ConfigurarNavigator(TranslatorResponseToModelResumoFinanceiro(_registrosResumo)); 

               // this._view.HabilitarCamposTela(false, false, false, true);
            }
            
            catch (Exception ex)
            {
                HandleException(ex);
            }

        }

        public void NavegarResumoFinanceiro(ModelResumoFinanceiro resumoFinanceiro,   bool isAnalitico)
        {

            bool ocultarColunas =false; 

            this._view.ExibirDados(resumoFinanceiro );

            IEnumerable comitentes = null; 

            ConsultarComitenteRequest requestComitente = new ConsultarComitenteRequest(); 

            requestComitente.CodigoCliente = (int) resumoFinanceiro.CodigoCliente;
            requestComitente.DataMovimento = resumoFinanceiro.DataMovimento.Value;
            requestComitente.CodigoBolsaFaturamento = resumoFinanceiro.CodigoBolsaFaturamento;
            requestComitente.TipoNegocio = resumoFinanceiro.TipoNegocio;
            requestComitente.DataPregao = (DateTime) resumoFinanceiro.DataPregao;
            requestComitente.TipoCliente = ConverterTipoCliente( resumoFinanceiro.TipoCliente);

            if (this.ModuleID == "ORD")
            {
                /// Data:19/03/2008 17:16
                /// Autor:DMilanez.7Comm
                /// Obs: Alterado
                //if (objResumoFinanceiro.IsAnalitico)
                if (isAnalitico)
                {
                    comitentes = _comunicacao.ConsultarComitenteAnaliticoControleOrdens(requestComitente);
                    ocultarColunas = false;
                }
                else
                {
                    comitentes = _comunicacao.ConsultarComitenteControleOrdens(requestComitente);
                    ocultarColunas = true;
                }

            }
            else if (this.ModuleID == "BOL")
            {

                if (isAnalitico)
                {
                    comitentes = _comunicacao.ConsultarComitenteAnaliticoFaturamentoBolsas(requestComitente);
                    ocultarColunas = false;
                }
                else
                {
                    comitentes = _comunicacao.ConsultarComitenteFaturamentoBolsas(requestComitente);
                    ocultarColunas = true;
                }
            }

            this._view.ExibirComitentes(comitentes);

            this._view.OcultarColunas(ocultarColunas);
            this.HabilitarBotoesNavegacao();

            if (resumoFinanceiro.TipoCliente == Model.Enum.TipoCliente.Cliente)
            {
                this._view.HabilitarCamposCliente(true);
                this._view.BotaoCalcularVisivel = true;
                this._view.HabilitarCalculoFinanceiro();
            }
            else
            {
                this._view.HabilitarCamposCliente(false);
                this._view.BotaoCalcularVisivel = false;
                this._view.HabilitarCalculoFinanceiro();
            }

        }

        private List<ModelResumoFinanceiro>  TranslatorResponseToModelResumoFinanceiro(List<ResumoFinanceiroResponse> _registrosResumo)
        {
            List<ModelResumoFinanceiro> retorno = new List<ModelResumoFinanceiro>();

            foreach (ResumoFinanceiroResponse resumoFinanceiro in _registrosResumo)
            {
                retorno.Add(TranslatorResponseToModelResumoFinanceiro(resumoFinanceiro));  
                    
            }

            return retorno; 

        }

        private ModelResumoFinanceiro TranslatorResponseToModelResumoFinanceiro(ResumoFinanceiroResponse r)
        {
            ModelResumoFinanceiro modelResumoFinanceiro = new ModelResumoFinanceiro();
            modelResumoFinanceiro.ApelidoCliente = r.ApelidoCliente;
            modelResumoFinanceiro.CodigoBolsaFaturamento = r.CodigoBolsaFaturamento; 
            modelResumoFinanceiro.CodigoCliente = r.CodigoCliente;
            modelResumoFinanceiro.CodigoGrupoContabilCliente = r.CodigoGrupoContabilCliente;
            modelResumoFinanceiro.DataMovimento = r.DataMovimento;
            modelResumoFinanceiro.DataNegocio = r.DataNegocio;
            modelResumoFinanceiro.DataPregao = r.DataPregao;
            modelResumoFinanceiro.IndicadorISS = r.IndicadorISS;
            modelResumoFinanceiro.IsContaInvestimento = r.IsContaInvestimento;
            modelResumoFinanceiro.IsCorrespondente = r.IsCorrespondente;
            modelResumoFinanceiro.IsISSCorretagemReverso = r.IsCorretagemISSReverso;
            modelResumoFinanceiro.IsNotaUnica = r.IsNotaUnica;
            modelResumoFinanceiro.IsSomenteContaSelecionada = r.IsSomenteContaSelecionada;
            modelResumoFinanceiro.NomeCliente = r.NomeCliente;
            modelResumoFinanceiro.PorcentagemDescontoAplicado = r.PorcentagemDescontoAplicado;
            modelResumoFinanceiro.PorcentagemDescontoCadastrado = r.PorcentagemDescontoCadastrado;
            modelResumoFinanceiro.PrazoLiquidacao = r.PrazoLiquidacao;

            Model.Enum.TipoCliente tipoCliente = new Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoCliente(); 
            switch (r.TipoCliente) 
            {
                case TipoCliente.Broker: 
                    tipoCliente = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoCliente.Broker;
                    break; 
                case TipoCliente.Cliente: 
                    tipoCliente = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoCliente.Cliente;
                    break;
                case TipoCliente.Financeiro:
                    tipoCliente = Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoCliente.Financeiro ;
                    break;
            }

            modelResumoFinanceiro.TipoCliente = tipoCliente;
            modelResumoFinanceiro.TipoNegocio = r.TipoNegocio;
            modelResumoFinanceiro.ValorAjusteDayTrade = r.ValorAjusteDayTrade;
            modelResumoFinanceiro.ValorAjusteDia = r.ValorAjusteDia;
            modelResumoFinanceiro.ValorAjustePosicao = r.ValorAjustePosicao;
            modelResumoFinanceiro.ValorComissaoAssessorCliente = r.ValorComissaoAssessorCliente;
            modelResumoFinanceiro.ValorCorretagemOriginal = r.ValorCorretagemOriginal;
            modelResumoFinanceiro.ValorCorretagemTotalOriginal = r.ValorCorretagemTotalOriginal;
            modelResumoFinanceiro.ValorDescontoCorretagem = r.ValorDescontoCorretagem;
            modelResumoFinanceiro.ValorDescontoCorretagemCliente = r.ValorDescontoCorretagemCliente;
            modelResumoFinanceiro.ValorEmolumentosLiquidacaoBovespa = r.ValorEmolumentosLiquidacaoBovespa;
            modelResumoFinanceiro.ValorEmolumentosLiquidacaoCBLC = r.ValorEmolumentosLiquidacaoCBLC;
            modelResumoFinanceiro.ValorEmolumentosOperacoesCarteiraPropria = r.ValorEmolumentosOperacoesCarteiraPropria;
            modelResumoFinanceiro.ValorEmolumentosOperacoesDayTrade = r.ValorEmolumentosOperacoesDayTrade;
            modelResumoFinanceiro.ValorEmolumentosOperacoesFinais = r.ValorEmolumentosOperacoesFinais;
            modelResumoFinanceiro.ValorIRCorretagem = r.ValorIRCorretagem;
            modelResumoFinanceiro.ValorIRRF = r.ValorIRRF;
            modelResumoFinanceiro.ValorISS = r.ValorISS;
            modelResumoFinanceiro.ValorLiquidoNotaCorretagem = r.ValorLiquidoNotaCorretagem;
            modelResumoFinanceiro.ValorOperacoesDebentures = r.ValorOperacoesDebentures;
            modelResumoFinanceiro.ValorOperacoesFuturas = r.ValorOperacoesFuturo;
            modelResumoFinanceiro.ValorOperacoesTitulosPublicos = r.ValorOperacoesTitulosPublicos;
            modelResumoFinanceiro.ValorRepasseCorrespondente = r.ValorRepasseCorrespondente;
            modelResumoFinanceiro.ValorTaxaANA = r.ValorTaxaANA;
            modelResumoFinanceiro.ValorTaxaIOF = r.ValorTaxaIOF;
            modelResumoFinanceiro.ValorTaxaPTAN = r.ValorTaxaPTAN;
            modelResumoFinanceiro.ValorTaxaRegistroBovespa = r.ValorTaxaRegistroBovespa;
            modelResumoFinanceiro.ValorTaxaRegistroCBLC = r.ValorTaxaRegistroCBLC;
            modelResumoFinanceiro.ValorTaxaRegistroOperacoesCarteiraPropria = r.ValorTaxaRegistroOperacoesCarteiraPropria;
            modelResumoFinanceiro.ValorTaxaRegistroOperacoesDayTrade = r.ValorTaxaRegistroOperacoesDayTrade;
            modelResumoFinanceiro.ValorTaxaRegistroOperacoesFinais = r.ValorTaxaRegistroOperacoesFinais;
            modelResumoFinanceiro.ValorTotalCompraMercadoFuturo = r.ValorTotalCompraMercadoFuturo;
            modelResumoFinanceiro.ValorTotalCorretagem = r.ValorTotalCorretagem;
            modelResumoFinanceiro.ValorTotalEmolumentos = r.ValorTotalEmolumentos;
            modelResumoFinanceiro.ValorTotalTaxaRegistro = r.ValorTotalTaxaRegistro;
            modelResumoFinanceiro.ValorTotalVendaMercadoFuturo = r.ValorTotalVendaMercadoFuturo;
            modelResumoFinanceiro.VolumeComprasOpcao = r.VolumeComprasOpcao;
            modelResumoFinanceiro.VolumeComprasVista = r.VolumeComprasVista;
            modelResumoFinanceiro.VolumeNegocios = r.VolumeNegocios;
            modelResumoFinanceiro.VolumeOperacoesTermo = r.VolumeOperacoesTermo;
            modelResumoFinanceiro.VolumeVendasOpcao = r.VolumeVendasOpcao;
            modelResumoFinanceiro.VolumeVendasVista = r.VolumeVendasVista;

            return modelResumoFinanceiro;
        }

        #endregion

        #region Pesquisar Comitente

        /// <summary>
        /// Realiza a pesquisa de um comitente.
        /// </summary>
        /// <param name="objResumoFinanceiro">Objeto da classe resumo financeiro com os filtros definidos pelo usuário.</param>
        /// <user>asoares</user>
        public void PesquisarComitente(ModelFiltroResumoFinanceiro filtro, bool isAnalitico)
        {
            ConsultarComitenteRequest requestComitente;
            IEnumerable comitentes = null;
            bool ocultarColunas = false;

            try
            {
                if (!ValidarFiltroPesquisaComitente(filtro))
                    return;

                requestComitente = new ConsultarComitenteRequest();

                //20080318 - dmilanez - alterado de forma a verificar o parametro de entrada que indica o modulo que executou a tela
                //if (objResumoFinanceiro.Chamada == Sistema.ControleOrdens)
                if (this.ModuleID == "ORD")
                {
                    requestComitente.CodigoCliente = filtro.CodigoCliente.Value;
                    requestComitente.DataMovimento = filtro.DataMovimento.Value;
                    requestComitente.CodigoBolsaFaturamento = filtro.CodigoBolsaFaturamento;
                    requestComitente.TipoNegocio = filtro.TipoNegocio;
                    requestComitente.DataPregao = filtro.DataPregao.Value;
                    requestComitente.TipoCliente = ConverterTipoCliente(filtro.TipoCliente.Value);

                    if (isAnalitico)
                    {
                        comitentes = _comunicacao.ConsultarComitenteAnaliticoControleOrdens(requestComitente);
                        ocultarColunas = false;
                    }
                    else
                    {
                        comitentes = _comunicacao.ConsultarComitenteControleOrdens(requestComitente);
                        ocultarColunas = true;
                    }
                }
                //20080318 - dmilanez - alterado de forma a verificar o parametro de entrada que indica o modulo que executou a tela
                //else if (objResumoFinanceiro.Chamada == Sistema.FaturamentoBolsas)
                else if (this.ModuleID == "BOL")
                {
                    requestComitente.CodigoCliente = filtro.CodigoCliente.Value;
                    requestComitente.DataMovimento = filtro.DataMovimento.Value;
                    requestComitente.CodigoBolsaFaturamento = filtro.CodigoBolsaFaturamento;
                    requestComitente.TipoNegocio = filtro.TipoNegocio;
                    requestComitente.DataPregao = filtro.DataPregao.Value;
                    requestComitente.TipoCliente = ConverterTipoCliente(filtro.TipoCliente.Value);

                    /// Data:19/03/2008 17:16
                    /// Autor:DMilanez.7Comm
                    /// Obs: Alterado
                    //if (objResumoFinanceiro.IsAnalitico)
                    if (isAnalitico)
                    {
                        comitentes = _comunicacao.ConsultarComitenteAnaliticoFaturamentoBolsas(requestComitente);
                        ocultarColunas = false;
                    }
                    else
                    {
                        comitentes = _comunicacao.ConsultarComitenteFaturamentoBolsas(requestComitente);
                        ocultarColunas = true;
                    }
                }
                else
                {
                    //20080319 - dmilanez - se for chamado por algum outro módulo, não executar ação alguma
                    return;
                }

                this._view.OcultarColunas(ocultarColunas);
                this._view.ExibirComitentes(comitentes);
                //Ptruiz.gp - 2008.12.15 -  Alteração para atender o bug 4721
                //this._view.HabilitarCamposCliente(false);
                //this._view.HabilitarCamposCliente(isAnalitico);
                // Alterado conforme solicitado pelo Nemir em 30/12/2008
               // this._view.HabilitarCamposTela(false, false, false, false); 
            }
            
            catch (Exception ex)
            {
                HandleException(ex);
            }
        }

        #endregion

        #region Converter objeto ResumoFinanceiroResponse para o objeto Presenter.ResumoFinanceiro

        /// <summary>
        /// Atribui os valores dos atributos de um objeto Sinacor.UI.Bovespa.Ordens.Communication.ServiceResumoFinanceiro.ResumoFinanceiroResponse
        /// para os atributos de um objeto Presenter.ResumoFinanceiro.
        /// </summary>
        /// <param name="resumo">Objeto cujo conteúdo dos atributos será transferido para o objeto ResumoFinanceiro.</param>
        /// <returns>Objeto ResumoFinanceiro para ser repassado para a view.</returns>
        /// <user>asoares</user>
        private ModelResumoFinanceiro ConverterResumoFinanceiro(ResumoFinanceiroResponse resumo, bool isAnalitico)
        {
            ModelResumoFinanceiro objResumoFinanceiro = new ModelResumoFinanceiro();

            //Pesquisa
            objResumoFinanceiro.ApelidoCliente = resumo.ApelidoCliente;
            objResumoFinanceiro.NomeCliente = resumo.NomeCliente;
            objResumoFinanceiro.DataPregao = Convert.ToDateTime(resumo.DataPregao);
            objResumoFinanceiro.TipoCliente = ConverterTipoCliente(resumo.TipoCliente);
            objResumoFinanceiro.IsSomenteContaSelecionada = resumo.IsSomenteContaSelecionada;

            objResumoFinanceiro.IsContaInvestimento = resumo.IsContaInvestimento;

            //20080318 - dmilanez - alterado de forma a verificar o parametro de entrada que indica o modulo que executou a tela
            //if (objResumoFinanceiro.Chamada == Sistema.ControleOrdens)
            if (this.ModuleID == "ORD")
            {
                ConsultarComitenteRequest requestComitente = new ConsultarComitenteRequest();

                requestComitente.CodigoCliente = _registrosResumo[RegistroAtual].CodigoCliente;
                requestComitente.DataMovimento = _registrosResumo[RegistroAtual].DataMovimento.Value;
                requestComitente.CodigoBolsaFaturamento = _registrosResumo[RegistroAtual].CodigoBolsaFaturamento;
                requestComitente.TipoNegocio = _registrosResumo[RegistroAtual].TipoNegocio;
                requestComitente.DataPregao = _registrosResumo[RegistroAtual].DataPregao;
                requestComitente.TipoCliente = _registrosResumo[RegistroAtual].TipoCliente;

                //excluido bloco - Ini - consulta duplicada - esertorio - 200805121433 - ref issue ID0004682
                ///// Data:19/03/2008 17:16
                ///// Autor:DMilanez.7Comm
                ///// Obs: Alterado
                ////if (objResumoFinanceiro.IsAnalitico)
                //if (isAnalitico)
                //    objResumoFinanceiro.DadosNegocio = _comunicacao.ConsultarComitenteAnaliticoControleOrdens(requestComitente);
                //else
                //    objResumoFinanceiro.DadosNegocio = _comunicacao.ConsultarComitenteControleOrdens(requestComitente);
                //excluido bloco - Fim - consulta duplicada - esertorio - 200805121433 - ref issue ID0004682
            }
            //20080318 - dmilanez - alterado de forma a verificar o parametro de entrada que indica o modulo que executou a tela
            //else if (objResumoFinanceiro.Chamada == Sistema.FaturamentoBolsas)
            else if (this.ModuleID == "BOL")
            {
                ConsultarComitenteRequest requestComitente = new ConsultarComitenteRequest();

                requestComitente.CodigoCliente = _registrosResumo[RegistroAtual].CodigoCliente;
                requestComitente.DataMovimento = _registrosResumo[RegistroAtual].DataMovimento.Value;
                requestComitente.CodigoBolsaFaturamento = _registrosResumo[RegistroAtual].CodigoBolsaFaturamento;
                requestComitente.TipoNegocio = _registrosResumo[RegistroAtual].TipoNegocio;
                requestComitente.DataPregao = _registrosResumo[RegistroAtual].DataPregao;
                requestComitente.TipoCliente = _registrosResumo[RegistroAtual].TipoCliente;

                //excluido bloco - Ini - consulta duplicada - esertorio - 200805121433 - ref issue ID0004682
                ///// Data:19/03/2008 17:16
                ///// Autor:DMilanez.7Comm
                ///// Obs: Alterado
                ////if (objResumoFinanceiro.IsAnalitico)
                //if (isAnalitico)
                //    objResumoFinanceiro.DadosNegocio = _comunicacao.ConsultarComitenteAnaliticoFaturamentoBolsas(requestComitente);
                //else
                //    objResumoFinanceiro.DadosNegocio = _comunicacao.ConsultarComitenteFaturamentoBolsas(requestComitente);
                //excluido bloco - Fim - consulta duplicada - esertorio - 200805121433 - ref issue ID0004682
            }
            else
            {
                //20080319 - dmilanez - se for chamado por algum outro módulo, não executar ação alguma
                return null;
            }

            // Resumo dos Negócios
            objResumoFinanceiro.VolumeVendasVista =  (resumo.VolumeVendasVista == null) ? 0:  Convert.ToDecimal(resumo.VolumeVendasVista);
            objResumoFinanceiro.VolumeComprasVista = (resumo.VolumeComprasVista == null) ? 0 : Convert.ToDecimal(resumo.VolumeComprasVista);
            objResumoFinanceiro.VolumeOperacoesTermo = (resumo.VolumeOperacoesTermo == null) ? 0 : Convert.ToDecimal(resumo.VolumeOperacoesTermo);
            objResumoFinanceiro.VolumeVendasOpcao = (resumo.VolumeVendasOpcao == null) ? 0 : Convert.ToDecimal(resumo.VolumeVendasOpcao);
            objResumoFinanceiro.VolumeComprasOpcao = (resumo.VolumeComprasOpcao == null) ? 0 : Convert.ToDecimal(resumo.VolumeComprasOpcao);
            objResumoFinanceiro.ValorOperacoesDebentures = (resumo.ValorOperacoesDebentures == null) ? 0 : Convert.ToDecimal(resumo.ValorOperacoesDebentures);


            // Resumo dos Negócios - Futuro
            objResumoFinanceiro.ValorAjusteDia = Convert.ToDecimal(resumo.ValorAjusteDia);
            objResumoFinanceiro.ValorAjustePosicao = Convert.ToDecimal(resumo.ValorAjustePosicao);
            objResumoFinanceiro.ValorAjusteDayTrade = Convert.ToDecimal(resumo.ValorAjusteDayTrade);
            objResumoFinanceiro.ValorTotalVendaMercadoFuturo = Convert.ToDecimal(resumo.ValorTotalVendaMercadoFuturo);
            objResumoFinanceiro.ValorTotalCompraMercadoFuturo = Convert.ToDecimal(resumo.ValorTotalCompraMercadoFuturo);
            objResumoFinanceiro.ValorOperacoesFuturas = Convert.ToDecimal(resumo.ValorOperacoesFuturo);
            objResumoFinanceiro.VolumeNegocios = Convert.ToDecimal(resumo.VolumeNegocios);


            // Resumo Financeiro
            objResumoFinanceiro.PorcentagemDescontoCadastrado = Convert.ToDecimal(resumo.PorcentagemDescontoCadastrado);
            objResumoFinanceiro.PorcentagemDescontoAplicado = Convert.ToDecimal(Math.Round(Convert.ToDouble(resumo.PorcentagemDescontoAplicado), 8));
            objResumoFinanceiro.IsISSCorretagemReverso = resumo.IsCorretagemISSReverso;
            objResumoFinanceiro.ValorCorretagemOriginal = Convert.ToDecimal(Math.Round(Convert.ToDouble(resumo.ValorCorretagemOriginal), 2));
            objResumoFinanceiro.ValorLiquidoNotaCorretagem = Convert.ToDecimal(Math.Round(Convert.ToDouble(resumo.ValorLiquidoNotaCorretagem), 2));
            objResumoFinanceiro.PrazoLiquidacao = Convert.ToDateTime(resumo.PrazoLiquidacao);


            // Detalhe Financeiro - Corretagem
            objResumoFinanceiro.ValorTotalCorretagem = Convert.ToDecimal(resumo.ValorTotalCorretagem);

            /// Data:02/02/2008 16:57
            /// Autor:Dmilanez.7comm
            /// Obs: Removido do contrato
            ///objResumoFinanceiro.ValorRepasseCorretagemCorrespondente = Convert.ToDecimal(resumo.ValorRepasseCorretagemCorrespondente);

            objResumoFinanceiro.ValorRepasseCorrespondente = Convert.ToDecimal(resumo.ValorRepasseCorrespondente);
            objResumoFinanceiro.ValorCorretagemTotalOriginal = Convert.ToDecimal(resumo.ValorCorretagemTotalOriginal);
            objResumoFinanceiro.ValorDescontoCorretagemCliente = Convert.ToDecimal(resumo.ValorDescontoCorretagemCliente);
            objResumoFinanceiro.ValorISS = Convert.ToDecimal(resumo.ValorISS);
            objResumoFinanceiro.IndicadorISS = resumo.IndicadorISS;
            objResumoFinanceiro.ValorIRCorretagem = Convert.ToDecimal(resumo.ValorIRCorretagem);
            objResumoFinanceiro.ValorIRRF = Convert.ToDecimal(resumo.ValorIRRF);


            // Detalhe Financeiro - Emolumento
            objResumoFinanceiro.ValorEmolumentosOperacoesFinais = Convert.ToDecimal(resumo.ValorEmolumentosOperacoesFinais);
            objResumoFinanceiro.ValorEmolumentosOperacoesDayTrade = Convert.ToDecimal(resumo.ValorEmolumentosOperacoesDayTrade);
            objResumoFinanceiro.ValorEmolumentosOperacoesCarteiraPropria = Convert.ToDecimal(resumo.ValorEmolumentosOperacoesCarteiraPropria);
            objResumoFinanceiro.ValorEmolumentosLiquidacaoBovespa = Convert.ToDecimal(resumo.ValorEmolumentosLiquidacaoBovespa);
            objResumoFinanceiro.ValorEmolumentosLiquidacaoCBLC = Convert.ToDecimal(resumo.ValorEmolumentosLiquidacaoCBLC);


            //Detalhe Financeiro - Tx. de Registro
            objResumoFinanceiro.ValorTaxaRegistroOperacoesFinais = Convert.ToDecimal(resumo.ValorTaxaRegistroOperacoesFinais);
            objResumoFinanceiro.ValorTaxaRegistroOperacoesCarteiraPropria = Convert.ToDecimal(resumo.ValorTaxaRegistroOperacoesCarteiraPropria);
            objResumoFinanceiro.ValorTaxaRegistroOperacoesDayTrade = Convert.ToDecimal(resumo.ValorTaxaRegistroOperacoesDayTrade);
            objResumoFinanceiro.ValorTaxaRegistroBovespa = Convert.ToDecimal(resumo.ValorTaxaRegistroBovespa);
            objResumoFinanceiro.ValorTaxaRegistroCBLC = Convert.ToDecimal(resumo.ValorTaxaRegistroCBLC);


            //Detalhe Financeiro - Taxa
            objResumoFinanceiro.ValorTaxaPTAN = Convert.ToDecimal(resumo.ValorTaxaPTAN);
            objResumoFinanceiro.ValorTaxaIOF = Convert.ToDecimal(resumo.ValorTaxaIOF);
            objResumoFinanceiro.ValorTaxaANA = Convert.ToDecimal(resumo.ValorTaxaANA);
            objResumoFinanceiro.ValorDescontoCorretagem = Convert.ToDecimal(resumo.ValorDescontoCorretagem);


            //Propertys

            objResumoFinanceiro.ValorTotalTaxaRegistro = Convert.ToDecimal(resumo.ValorTotalTaxaRegistro);
            objResumoFinanceiro.ValorTotalEmolumentos = Convert.ToDecimal(resumo.ValorTotalEmolumentos);
            objResumoFinanceiro.ValorComissaoAssessorCliente = Convert.ToDecimal(resumo.ValorComissaoAssessorCliente);
            objResumoFinanceiro.CodigoGrupoContabilCliente = resumo.CodigoGrupoContabilCliente;
            objResumoFinanceiro.CodigoBolsaFaturamento = resumo.CodigoBolsaFaturamento;
            objResumoFinanceiro.CodigoCliente = resumo.CodigoCliente;
            objResumoFinanceiro.DataNegocio = Convert.ToDateTime(resumo.DataNegocio);
            objResumoFinanceiro.DataMovimento = resumo.DataMovimento.Value;
            objResumoFinanceiro.IsCorrespondente = resumo.IsCorrespondente;
            objResumoFinanceiro.TipoNegocio = resumo.TipoNegocio;
            objResumoFinanceiro.ValorOperacoesTitulosPublicos = Convert.ToDecimal(resumo.ValorOperacoesTitulosPublicos);
            objResumoFinanceiro.IsNotaUnica = resumo.IsNotaUnica;

            return objResumoFinanceiro;
        }

        #endregion

        #region Alterar Percentual de Corretagem
        /// Data:09/04/2008 17:01
        /// Autor:DMilanez.7Comm
        /// Obs: Adicionado para atender ao chamado 2841
        public void AlterarPercentualCorretagem(ModelResumoFinanceiro objResumoFinanceiro)
        {
            AlterarPercentualCorretagemRequest requestPercCorretagem;
            ModelMensagemValidacao retorno = null; //incluido - esertorio - 200805122359 - ref issue ID0004683
            Decimal? valorOriginal = null;
            try
            {
                if (!objResumoFinanceiro.CodigoCliente.HasValue || objResumoFinanceiro.CodigoCliente.Value <= 0)
                {
                    this._view.AvisarNenhumResumoFinanceiroInformado();
                }
                else
                {
                    //somente permitir a alteracao quando o tipo do cliente for "Cliente"
                    if (objResumoFinanceiro.TipoCliente != Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoCliente.Cliente)
                    {
                        this._view.AvisarAlteracaoNaoPermitidaParaTipoCliente();
                    }
                    else
                    {
                        ResumoFinanceiroResponse resumoAltual = _registrosResumo[RegistroAtual];
                       
                        
                        if (resumoAltual.PorcentagemDescontoAplicado.HasValue)
                            valorOriginal = Math.Round(resumoAltual.PorcentagemDescontoAplicado.Value, 8);

                        if (objResumoFinanceiro.PorcentagemDescontoAplicado != valorOriginal)
                        {
                            //20080410 10:31 - Alterado - DMilanez.7Comm
                            if (!this._view.ConfirmarAlteracaoDados())
                            {
                                this._view.RestaurarPorcentagemDescontoAplicado(valorOriginal);
                                return;
                            } 

                            requestPercCorretagem = new AlterarPercentualCorretagemRequest();

                            requestPercCorretagem.TipoCliente = ConverterTipoCliente(objResumoFinanceiro.TipoCliente);
                            requestPercCorretagem.CodigoCliente = objResumoFinanceiro.CodigoCliente.Value;
                           
                            requestPercCorretagem.DataMovimento =(DateTime) objResumoFinanceiro.DataMovimento;
                            requestPercCorretagem.CodigoBolsaFaturamento = objResumoFinanceiro.CodigoBolsaFaturamento;
                            requestPercCorretagem.TipoNegocio = objResumoFinanceiro.TipoNegocio;

                            requestPercCorretagem.IsCorretagemISSReverso = objResumoFinanceiro.IsISSCorretagemReverso;

                            if (objResumoFinanceiro.PorcentagemDescontoAplicado.HasValue)
                                requestPercCorretagem.PorcentagemDescontoAplicado = objResumoFinanceiro.PorcentagemDescontoAplicado.Value;
                            else
                                requestPercCorretagem.PorcentagemDescontoAplicado = 0;

                            if (this.ModuleID == "ORD")
                               retorno = _comunicacao.AlterarPercentualCorretagemControleOrdens(requestPercCorretagem);
                            else if (this.ModuleID == "BOL")
                               retorno = _comunicacao.AlterarPercentualCorretagemFaturamentoBolsas(requestPercCorretagem);

                           if (!TratarRretorno(retorno)) //incluido - esertorio - 200805122359 - ref issue ID0004683
                           {
                               this._view.RestaurarPorcentagemDescontoAplicado(valorOriginal);
                               return;
                           }

                            _registrosResumo[RegistroAtual].PorcentagemDescontoAplicado = objResumoFinanceiro.PorcentagemDescontoAplicado;

                            this._view.AvisarItemSalvoComSucesso();
                        }

                    }
                }
            }
            
            catch (Exception ex)
            {
                this._view.RestaurarPorcentagemDescontoAplicado(valorOriginal);
                HandleException(ex);
                //return;
            }
        }
        #endregion

        #region Alterar Valor de Corretagem
        /// Data:09/04/2008 17:01
        /// Autor:DMilanez.7Comm
        /// Obs: Adicionado para atender ao chamado 2841
        public void AlterarValorCorretagem(ModelResumoFinanceiro objResumoFinanceiro)
        {
            AlterarValorCorretagemRequest requestValorCorretagem;
            ModelMensagemValidacao retorno = null; //incluido - esertorio - 200805122359 - ref issue ID0004683
            Decimal? valorOriginal = null;
            try
            {
                if (!objResumoFinanceiro.CodigoCliente.HasValue || objResumoFinanceiro.CodigoCliente.Value <= 0)
                {
                    this._view.AvisarNenhumResumoFinanceiroInformado();
                }
                else
                {
                    //somente permitir a alteracao quando o tipo do cliente for "Cliente"
                    if (objResumoFinanceiro.TipoCliente != Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoCliente.Cliente)
                    {
                        this._view.AvisarAlteracaoNaoPermitidaParaTipoCliente();
                    }
                    else
                    {
                        ResumoFinanceiroResponse resumoAltual = _registrosResumo[RegistroAtual];
                        
                        if (resumoAltual.ValorCorretagemOriginal.HasValue)
                            valorOriginal = Math.Round(resumoAltual.ValorCorretagemOriginal.Value, 2);

                        if (objResumoFinanceiro.ValorCorretagemOriginal != valorOriginal)
                        {
                            //20080410 10:31 - Alterado - DMilanez.7Comm
                            if (!this._view.ConfirmarAlteracaoDados())
                            {
                                this._view.RestaurarValorCorretagemOriginal(valorOriginal);
                                return;
                            }        

                            requestValorCorretagem = new AlterarValorCorretagemRequest();

                            requestValorCorretagem.TipoCliente = ConverterTipoCliente(objResumoFinanceiro.TipoCliente);
                            requestValorCorretagem.CodigoCliente = objResumoFinanceiro.CodigoCliente.Value;

                            requestValorCorretagem.DataMovimento = (DateTime) objResumoFinanceiro.DataMovimento;
                            requestValorCorretagem.CodigoBolsaFaturamento = objResumoFinanceiro.CodigoBolsaFaturamento;
                            requestValorCorretagem.TipoNegocio = objResumoFinanceiro.TipoNegocio;

                            if (objResumoFinanceiro.ValorCorretagemOriginal.HasValue)
                                requestValorCorretagem.ValorCorretagem = objResumoFinanceiro.ValorCorretagemOriginal.Value;
                            else
                                requestValorCorretagem.ValorCorretagem = 0;

                            requestValorCorretagem.IsCorretagemISSReverso = objResumoFinanceiro.IsISSCorretagemReverso;

                            if (this.ModuleID == "ORD")
                                retorno = _comunicacao.AlterarValorCorretagemControleOrdens(requestValorCorretagem);
                            else if (this.ModuleID == "BOL")
                                retorno = _comunicacao.AlterarValorCorretagemFaturamentoBolsas(requestValorCorretagem);

                            if (!TratarRretorno(retorno)) //incluido - esertorio - 200805122359 - ref issue ID0004683
                            {
                                this._view.RestaurarValorCorretagemOriginal(valorOriginal);
                                return;
                            }        

                            _registrosResumo[RegistroAtual].ValorCorretagemOriginal = objResumoFinanceiro.ValorCorretagemOriginal;

                            this._view.AvisarItemSalvoComSucesso();
                        }

                    }
                }
            }
            
            catch (Exception ex)
            {
                this._view.RestaurarValorCorretagemOriginal(valorOriginal);
                HandleException(ex);
                
            }
        }
        #endregion

        #region Alterar Liquido da Nota
        /// Data:09/04/2008 17:01
        /// Autor:DMilanez.7Comm
        /// Obs: Adicionado para atender ao chamado 2841
        public void AlterarLiquidoNota(ModelResumoFinanceiro objResumoFinanceiro)
        {
            AlterarTotalLiquidoRequest requestTotalLiquido;
            ModelMensagemValidacao retorno = null; //incluido - esertorio - 200805122359 - ref issue ID0004683

            try
            {
                if (!objResumoFinanceiro.CodigoCliente.HasValue || objResumoFinanceiro.CodigoCliente.Value <= 0)
                {
                    this._view.AvisarNenhumResumoFinanceiroInformado();
                }
                else
                {
                    //somente permitir a alteracao quando o tipo do cliente for "Cliente"
                    if (objResumoFinanceiro.TipoCliente != Sinacor.UI.Bovespa.Ordens.Model.Enum.TipoCliente.Cliente)
                    {
                        this._view.AvisarAlteracaoNaoPermitidaParaTipoCliente();
                    }
                    else
                    {
                        ResumoFinanceiroResponse resumoAltual = _registrosResumo[RegistroAtual];
                        Decimal? valorOriginal = null;
                        
                        if (resumoAltual.ValorLiquidoNotaCorretagem.HasValue)
                            valorOriginal =  Math.Round(resumoAltual.ValorLiquidoNotaCorretagem.Value, 2);

                        if (objResumoFinanceiro.ValorLiquidoNotaCorretagem != valorOriginal)
                        {
                            //20080410 10:31 - Alterado - DMilanez.7Comm
                            if (!this._view.ConfirmarAlteracaoDados())
                            {
                                this._view.RestaurarValorLiquidoNota(valorOriginal);
                                return;
                            }

                            requestTotalLiquido = new AlterarTotalLiquidoRequest();

                            requestTotalLiquido.TipoCliente = ConverterTipoCliente(objResumoFinanceiro.TipoCliente);
                            requestTotalLiquido.CodigoCliente = objResumoFinanceiro.CodigoCliente.Value;
                            requestTotalLiquido.DataMovimento = (DateTime) objResumoFinanceiro.DataMovimento;
                            requestTotalLiquido.CodigoBolsaFaturamento = objResumoFinanceiro.CodigoBolsaFaturamento;
                            requestTotalLiquido.TipoNegocio = objResumoFinanceiro.TipoNegocio;

                            if (objResumoFinanceiro.ValorLiquidoNotaCorretagem.HasValue)
                                requestTotalLiquido.ValorLiquido = objResumoFinanceiro.ValorLiquidoNotaCorretagem.Value;
                            else
                                requestTotalLiquido.ValorLiquido = 0;

                            requestTotalLiquido.IsCorretagemISSReverso = objResumoFinanceiro.IsISSCorretagemReverso;

                            if (this.ModuleID == "ORD")
                                retorno = _comunicacao.AlterarTotalLiquidoControleOrdens(requestTotalLiquido);
                            else if (this.ModuleID == "BOL")
                                retorno = _comunicacao.AlterarTotalLiquidoFaturamentoBolsas(requestTotalLiquido);

                            if (!TratarRretorno(retorno)) //incluido - esertorio - 200805122359 - ref issue ID0004683
                            {
                                this._view.RestaurarValorLiquidoNota(valorOriginal);
                                return;
                            }
                            _registrosResumo[RegistroAtual].ValorLiquidoNotaCorretagem = objResumoFinanceiro.ValorLiquidoNotaCorretagem;
                            this._view.AvisarItemSalvoComSucesso();
                        }

                    }
                }
            }
            
            catch (Exception ex)
            {
                HandleException(ex);
                return;
            }
        }
        #endregion


        //#region Salvar Resumo Financeiro

        ///// <summary>
        ///// Salva as alterações do Resumo Financeiro.
        ///// </summary>
        ///// <param name="objResumoFinanceiro">Objeto com os valores que serão salvos.</param>
        ///// <user>asoares</user>
        //public void SalvarResumoFinanceiro(ModelResumoFinanceiro objResumoFinanceiro)
        //{
        //    AlterarPercentualCorretagemRequest requestPercCorretagem;
        //    AlterarValorCorretagemRequest requestValorCorretagem;
        //    AlterarTotalLiquidoRequest requestTotalLiquido;
        //    bool alteracaoRealizada = false;
        //    try
        //    {
        //        if (!objResumoFinanceiro.CodigoCliente.HasValue || objResumoFinanceiro.CodigoCliente.Value <= 0)
        //        {
        //            //this._view.ExibirMensagem(Mensagem.AcaoSemResumoFinanceiro);
        //            this._view.AvisarNenhumResumoFinanceiroInformado();
        //            return;
        //        }

        //        /// Data:04/02/2008 17:28
        //        /// Autor:DMilanez.7Comm
        //        /// Obs:
        //        /// Alterado para se adequar a regra correta, de forma que apenas clientes do tipo Cliente
        //        /// pordem alterar valores
        //        ///se o tipo de cliente nao for Cliente, n realizar qualquer alteracao
        //        if (objResumoFinanceiro.TipoCliente != Sinacor.UI.Bovespa.Ordens.Common.TipoCliente.Cliente)
        //        {
        //            //this._view.ExibirMensagem(Mensagem.AlteracaoNaoPermitida);
        //            this._view.AvisarAlteracaoNaoPermitidaParaTipoCliente();

        //            return;
        //        }

        //        if (PermitirAlteracao(objResumoFinanceiro))
        //        {
        //            if (objResumoFinanceiro.PorcentagemDescontoAplicado != Convert.ToDecimal(Math.Round(Convert.ToDouble(_registrosResumo[_registroAtual].PorcentagemDescontoAplicado), 8)))
        //            {
        //                requestPercCorretagem = new AlterarPercentualCorretagemRequest();

        //                requestPercCorretagem.TipoCliente = ConverterTipoCliente(objResumoFinanceiro.TipoCliente);
        //                requestPercCorretagem.CodigoCliente = objResumoFinanceiro.CodigoCliente.Value;
        //                requestPercCorretagem.DataMovimento = objResumoFinanceiro.DataMovimento;
        //                requestPercCorretagem.CodigoBolsaFaturamento = objResumoFinanceiro.CodigoBolsaFaturamento;
        //                requestPercCorretagem.TipoNegocio = objResumoFinanceiro.TipoNegocio;

        //                requestPercCorretagem.IsCorretagemISSReverso = objResumoFinanceiro.IsISSCorretagemReverso;

        //                if (objResumoFinanceiro.PorcentagemDescontoAplicado.HasValue)
        //                    requestPercCorretagem.PorcentagemDescontoAplicado = objResumoFinanceiro.PorcentagemDescontoAplicado.Value;
        //                else
        //                    requestPercCorretagem.PorcentagemDescontoAplicado = 0;

        //                _comunicacao.AlterarPercentualCorretagem(requestPercCorretagem);
        //                alteracaoRealizada = true;
        //                _registrosResumo[_registroAtual].PorcentagemDescontoAplicado = objResumoFinanceiro.PorcentagemDescontoAplicado;
        //            }
        //            else
        //            {
        //                if (objResumoFinanceiro.ValorCorretagemOriginal != Convert.ToDecimal(Math.Round(Convert.ToDouble(_registrosResumo[_registroAtual].ValorCorretagemOriginal), 2)))
        //                {
        //                    requestValorCorretagem = new AlterarValorCorretagemRequest();

        //                    requestValorCorretagem.TipoCliente = ConverterTipoCliente(objResumoFinanceiro.TipoCliente);
        //                    requestValorCorretagem.CodigoCliente = objResumoFinanceiro.CodigoCliente.Value;
        //                    requestValorCorretagem.DataMovimento = objResumoFinanceiro.DataMovimento;
        //                    requestValorCorretagem.CodigoBolsaFaturamento = objResumoFinanceiro.CodigoBolsaFaturamento;
        //                    requestValorCorretagem.TipoNegocio = objResumoFinanceiro.TipoNegocio;

        //                    if (objResumoFinanceiro.ValorCorretagemOriginal.HasValue)
        //                        requestValorCorretagem.ValorCorretagem = objResumoFinanceiro.ValorCorretagemOriginal.Value;
        //                    else
        //                        requestValorCorretagem.ValorCorretagem = 0;

        //                    requestValorCorretagem.IsCorretagemISSReverso = objResumoFinanceiro.IsISSCorretagemReverso;

        //                    _comunicacao.AlterarValorCorretagem(requestValorCorretagem);
        //                    alteracaoRealizada = true;
        //                    _registrosResumo[_registroAtual].ValorCorretagemOriginal = objResumoFinanceiro.ValorCorretagemOriginal;
        //                }
        //                else if (objResumoFinanceiro.ValorLiquidoNotaCorretagem != Convert.ToDecimal(Math.Round(Convert.ToDouble(_registrosResumo[_registroAtual].ValorLiquidoNotaCorretagem), 2)))
        //                {
        //                    requestTotalLiquido = new AlterarTotalLiquidoRequest();

        //                    requestTotalLiquido.TipoCliente = ConverterTipoCliente(objResumoFinanceiro.TipoCliente);
        //                    requestTotalLiquido.CodigoCliente = objResumoFinanceiro.CodigoCliente.Value;
        //                    requestTotalLiquido.DataMovimento = objResumoFinanceiro.DataMovimento;
        //                    requestTotalLiquido.CodigoBolsaFaturamento = objResumoFinanceiro.CodigoBolsaFaturamento;
        //                    requestTotalLiquido.TipoNegocio = objResumoFinanceiro.TipoNegocio;

        //                    if (objResumoFinanceiro.ValorLiquidoNotaCorretagem.HasValue)
        //                        requestTotalLiquido.ValorLiquido = objResumoFinanceiro.ValorLiquidoNotaCorretagem.Value;
        //                    else
        //                        requestTotalLiquido.ValorLiquido = 0;

        //                    requestTotalLiquido.IsCorretagemISSReverso = objResumoFinanceiro.IsISSCorretagemReverso;

        //                    _comunicacao.AlterarTotalLiquido(requestTotalLiquido);
        //                    alteracaoRealizada = true;
        //                    _registrosResumo[_registroAtual].ValorLiquidoNotaCorretagem = objResumoFinanceiro.ValorLiquidoNotaCorretagem;
        //                }
        //            }

        //            /// Data:19/03/2008 10:19
        //            /// Autor:DMilanez.7Comm
        //            /// Obs: Alterado de forma a atualizar os valores de corretagem após a alteração
        //            if (alteracaoRealizada)
        //            {
        //                /// Data:19/03/2008 17:39
        //                /// Autor:DMilanez.7Comm
        //                /// Obs: alterado de forma a utilizar metodo especifico para avisar condicao de negocio
        //                //this._view.ExibirMensagem(Mensagem.SalvocomSucesso);
        //                this._view.AvisarItemSalvoComSucesso();
        //            }
        //            else
        //            {
        //                /// Data:19/03/2008 17:39
        //                /// Autor:DMilanez.7Comm
        //                /// Obs: alterado de forma a utilizar metodo especifico para avisar condicao de negocio
        //                //this._view.ExibirMensagem(Mensagem.NenhumRegistrosParaSalvar);
        //                this._view.AvisarNenhumItemParaSalvar();
        //            }
        //        }
        //        else
        //        {
        //            //this._view.ExibirMensagem(Mensagem.PermitirAlterarFalha);
        //            this._view.AvisarAlteracaoNaoPermitida();
        //        }
        //    }
        //    catch (ClientException ex)
        //    {
        //        HandleException(ex);
        //        return;
        //    }
        //    catch (ClientValidationException ex)
        //    {
        //        HandleException(ex);
        //        return;
        //    }
        //    catch (ClientCommunicationException ex)
        //    {
        //        HandleException(ex);
        //        return;
        //    }
        //    catch (ClientGeneralException ex)
        //    {
        //        HandleException(ex);
        //    }
        //    catch (Exception ex)
        //    {
        //        HandleException(ex);
        //    }
        //}

        //#endregion

        #region Permitir Alteracao

        /// <summary>
        /// Valida se o conteúdo de qualquer um dos campos que demandam gravação foi alterado.
        /// </summary>
        /// <user>aosares</user>
        private bool PermitirAlteracao(ModelResumoFinanceiro objResumoFinanceiro)
        {
            bool campoAlterado = false;

            if (objResumoFinanceiro.PorcentagemDescontoAplicado != Convert.ToDecimal(Math.Round(Convert.ToDouble(_registrosResumo[RegistroAtual].PorcentagemDescontoAplicado), 8)))
            {
                campoAlterado = true;
            }

            if (objResumoFinanceiro.ValorCorretagemOriginal != Convert.ToDecimal(Math.Round(Convert.ToDouble(_registrosResumo[RegistroAtual].ValorCorretagemOriginal), 2)))
            {
                if (campoAlterado)
                    return false;
                else
                    campoAlterado = true;
            }

            if (objResumoFinanceiro.ValorLiquidoNotaCorretagem != Convert.ToDecimal(Math.Round(Convert.ToDouble(_registrosResumo[RegistroAtual].ValorLiquidoNotaCorretagem), 2)))
            {
                if (campoAlterado)
                    return false;
                else
                    campoAlterado = true;
            }

            return true;
        }

        #endregion

        #region Calcular Resumo Financeiro

        /// <summary>
        /// Calcula o Resumo Financeiro.
        /// </summary>
        /// <param name="objResumoFinanceiro">Objeto Resumo Financeiro com os dados utilizados para realizar o cálculo financeiro.</param>
        /// <user>asoares</user>
        /// 
        public void CalcularResumoFinanceiro(ModelResumoFinanceiro objResumoFinanceiro)
        {
            CalcularResumoFinanceiroRequest requestCalcular;

            try
            {
                if (objResumoFinanceiro.CodigoCliente > 0)
                {
                    requestCalcular = new CalcularResumoFinanceiroRequest();

                    requestCalcular.IsCorrespondente = objResumoFinanceiro.IsCorrespondente;
                    requestCalcular.CodigoCliente = objResumoFinanceiro.CodigoCliente.Value;
                    requestCalcular.DataMovimento = (DateTime) objResumoFinanceiro.DataMovimento;

                    _comunicacao.CalcularResumoFinanceiro(requestCalcular);
                    this._view.AvisarCalculadoComSucesso();
                }
                else
                {
                    //this._view.ExibirMensagem(Mensagem.AcaoSemResumoFinanceiro);
                    this._view.AvisarNenhumResumoFinanceiroInformado();
                }
            }
            
            catch (Exception ex)
            {
                HandleException(ex);
                return;
            }
        }

        #endregion

        #region Resumo Financeiro - Primeiro

        /// <summary>
        /// Solicita a view a exibição do primeiro Resumo Financeiro da coleção obtida na pesquisa.
        /// </summary>
        /// <user>asoares</user>
        public void ResumoFinanceiroPrimeiro(bool isAnalitico)
        {
            if (_registrosResumo != null)
            {
                RegistroAtual = 0;

                ModelResumoFinanceiro modelRF = ConverterResumoFinanceiro(_registrosResumo[RegistroAtual], isAnalitico); //alterado - esertorio - 200805140110 - ref issue ID0004834

                this._view.ExibirDados(modelRF); //alterado - esertorio - 200805140110 - ref issue ID0004834

                ModelFiltroResumoFinanceiro filtroRF = new ModelFiltroResumoFinanceiro(); //incluido - esertorio - 200805140110 - ref issue ID0004834
                filtroRF.ApelidoCliente = modelRF.ApelidoCliente;
                filtroRF.CodigoBolsaFaturamento = modelRF.CodigoBolsaFaturamento;
                filtroRF.CodigoCliente = modelRF.CodigoCliente;
                filtroRF.DataMovimento = modelRF.DataMovimento;
                filtroRF.DataPregao = modelRF.DataPregao;
                filtroRF.IsSomenteContaSelecionada = modelRF.IsSomenteContaSelecionada;
                filtroRF.TipoCliente = modelRF.TipoCliente;
                filtroRF.TipoNegocio = modelRF.TipoNegocio;

                PesquisarComitente(filtroRF, isAnalitico); //incluido - esertorio - 200805140110 - ref issue ID0004834

                this.HabilitarBotoesNavegacao();

            }
        }

        #endregion

        #region Resumo Financeiro - Último

        /// <summary>
        /// Solicita a view a exibição do último Resumo Financeiro da coleção obtida na pesquisa.
        /// </summary>
        /// <user>asoares</user>
        public void ResumoFinanceiroUltimo(bool isAnalitico)
        {
            if (_registrosResumo != null)
            {
                RegistroAtual = _registrosResumo.Count - 1;

                ModelResumoFinanceiro modelRF = ConverterResumoFinanceiro(_registrosResumo[RegistroAtual], isAnalitico); //alterado - esertorio - 200805140110 - ref issue ID0004834

                this._view.ExibirDados(modelRF); //alterado - esertorio - 200805140110 - ref issue ID0004834

                ModelFiltroResumoFinanceiro filtroRF = new ModelFiltroResumoFinanceiro(); //incluido - esertorio - 200805140110 - ref issue ID0004834
                filtroRF.ApelidoCliente = modelRF.ApelidoCliente;
                filtroRF.CodigoBolsaFaturamento = modelRF.CodigoBolsaFaturamento;
                filtroRF.CodigoCliente = modelRF.CodigoCliente;
                filtroRF.DataMovimento = modelRF.DataMovimento;
                filtroRF.DataPregao = modelRF.DataPregao;
                filtroRF.IsSomenteContaSelecionada = modelRF.IsSomenteContaSelecionada;
                filtroRF.TipoCliente = modelRF.TipoCliente;
                filtroRF.TipoNegocio = modelRF.TipoNegocio;

                PesquisarComitente(filtroRF, isAnalitico); //incluido - esertorio - 200805140110 - ref issue ID0004834

                this.HabilitarBotoesNavegacao();
            }
        }

        #endregion

        #region Anterior - Resumo Financeiro

        /// <summary>
        /// Solicita a view a exibição do Resumo Financeiro anterior ao atual na coleção obtida na pesquisa.
        /// </summary>
        /// <user>asoares</user>
        public void ResumoFinanceiroAnterior(bool isAnalitico)
        {
            if (_registrosResumo != null)
            {
                if ((RegistroAtual - 1) >= 0)
                {
                    RegistroAtual--;

                    ModelResumoFinanceiro modelRF = ConverterResumoFinanceiro(_registrosResumo[RegistroAtual], isAnalitico); //alterado - esertorio - 200805140110 - ref issue ID0004834

                    this._view.ExibirDados(modelRF); //alterado - esertorio - 200805140110 - ref issue ID0004834

                    ModelFiltroResumoFinanceiro filtroRF = new ModelFiltroResumoFinanceiro(); //incluido - esertorio - 200805140110 - ref issue ID0004834
                    filtroRF.ApelidoCliente = modelRF.ApelidoCliente;
                    filtroRF.CodigoBolsaFaturamento = modelRF.CodigoBolsaFaturamento;
                    filtroRF.CodigoCliente = modelRF.CodigoCliente;
                    filtroRF.DataMovimento = modelRF.DataMovimento;
                    filtroRF.DataPregao = modelRF.DataPregao;
                    filtroRF.IsSomenteContaSelecionada = modelRF.IsSomenteContaSelecionada;
                    filtroRF.TipoCliente = modelRF.TipoCliente;
                    filtroRF.TipoNegocio = modelRF.TipoNegocio;

                    PesquisarComitente(filtroRF, isAnalitico); //incluido - esertorio - 200805140110 - ref issue ID0004834
                }
                this.HabilitarBotoesNavegacao();
            }
        }

        #endregion

        #region Posterior - Resumo Financeiro

        /// <summary>
        /// Solicita a view a exibição do Resumo Financeiro posterior ao atual na coleção obtida na pesquisa.
        /// </summary>
        /// <user>asoares</user>
        public void ResumoFinanceiroPosterior(bool isAnalitico)
        {
            if (_registrosResumo != null)
            {
                if ((RegistroAtual + 1) <= (_registrosResumo.Count - 1))
                {
                    RegistroAtual++;

                    ModelResumoFinanceiro modelRF = ConverterResumoFinanceiro(_registrosResumo[RegistroAtual], isAnalitico); //alterado - esertorio - 200805140110 - ref issue ID0004834

                    this._view.ExibirDados(modelRF); //alterado - esertorio - 200805140110 - ref issue ID0004834

                    ModelFiltroResumoFinanceiro filtroRF = new ModelFiltroResumoFinanceiro(); //incluido - esertorio - 200805140110 - ref issue ID0004834
                    filtroRF.ApelidoCliente = modelRF.ApelidoCliente;
                    filtroRF.CodigoBolsaFaturamento = modelRF.CodigoBolsaFaturamento;
                    filtroRF.CodigoCliente = modelRF.CodigoCliente;
                    filtroRF.DataMovimento = modelRF.DataMovimento;
                    filtroRF.DataPregao = modelRF.DataPregao;
                    filtroRF.IsSomenteContaSelecionada = modelRF.IsSomenteContaSelecionada;
                    filtroRF.TipoCliente = modelRF.TipoCliente;
                    filtroRF.TipoNegocio = modelRF.TipoNegocio;

                    PesquisarComitente(filtroRF, isAnalitico); //incluido - esertorio - 200805140110 - ref issue ID0004834
                }
               // this.HabilitarBotoesNavegacao();
            }
        }

        #endregion

        #region Habilitar botões de navegação

        /// <summary>
        /// Verifica quais os botões de navegação entre registros que devem ser habilitados na view.
        /// </summary>
        /// <user>asoares</user>
        public void HabilitarBotoesNavegacao()
        {
            //bool primeiro = true;
            //bool anterior = true;
            //bool posterior = true;
            //bool ultimo = true;

            //int tamanhoRegistro = 0;
            //int posicaoAtual = 0;

            //tamanhoRegistro = _registrosResumo.Count - 1;
            //posicaoAtual = _registroAtual;

            //if (tamanhoRegistro == posicaoAtual)
            //{
            //    posterior = false;
            //    ultimo = false;
            //}

            //if (posicaoAtual == 0)
            //{
            //    anterior = false;
            //    primeiro = false;
            //}

           // this._view.HabilitarNavegacao(primeiro, anterior, posterior, ultimo);
        }

        #endregion

        #region Limpar Resumo Financeiro

        /// <summary>
        /// Zera o objeto posicionado no item atual.
        /// </summary>
        /// <user>asoares</user>
        public void LimparResumoFinaceiro()
        {
            if (_registrosResumo != null)
                _registrosResumo[RegistroAtual] = null;
        }

        #endregion

        #region Configurar Nova Pesquisa
        /// <summary>
        /// Data:19/03/2008 12:27
        /// Autor:DMilanez.7Comm
        /// Obs: Metodo responsavel por configurar o presentar para uma nova busca
        /// </summary>
        public void ConfigurarNovaPesquisa(bool isNovaPesquisa)
        {
            this.ResetarEstado();
            this._view.ConfigurarNovaPesquisa(isNovaPesquisa);
        }
        #endregion

        #region Resetar Estado
        private void ResetarEstado()
        {
            
            this._registrosResumo = null;
        }

        #endregion

        /// <summary>
        /// Criacao do metodo (TratarRretorno) - esertorio - 200805122359 - ref issue ID0004683
        /// </summary>
        /// <param name="retorno"></param>
        /// <returns></returns>
        public bool TratarRretorno(ModelMensagemValidacao retorno)
        {
            if (retorno != null)
            {
                if (!retorno.AlterouNota.Value)
                {
                    if (!string.IsNullOrEmpty(retorno.Descricao))
                    {
                        this._view.ExibirMensagem(retorno.Descricao);
                        return false;
                    }

                    else
                    {
                        this._view.AvisarErroNaAlteracao();
                        return false;
                    }
                }
            }

            return true;
        }

        public void montarFiltroComitente(string ApelidoCliente, bool isSomenteSelecionada, DateTime dataPregao, ModelResumoFinanceiro model, bool isAnalitico, Ordens.Model.Enum.TipoCliente tipoCliente)
        {
            ModelFiltroResumoFinanceiro filtro = new ModelFiltroResumoFinanceiro();

            filtro.ApelidoCliente = ApelidoCliente;
            filtro.TipoCliente = tipoCliente;
            filtro.IsSomenteContaSelecionada = isSomenteSelecionada;
            filtro.DataPregao = dataPregao;

            filtro.CodigoCliente = model.CodigoCliente;
            filtro.DataMovimento = model.DataMovimento;
            filtro.CodigoBolsaFaturamento = model.CodigoBolsaFaturamento;
            filtro.TipoNegocio = model.TipoNegocio;


            this.PesquisarComitente(filtro, isAnalitico);
        }

    }
}
